home *** CD-ROM | disk | FTP | other *** search
- /*
- WordWorth2Text
- EvenMore FileIO plugin
- Author: Chris Perver
- Copyright (c) 2001
- */
-
-
- OPT REG=5
-
- LIBRARY 'wordworth2text.plugin',1,1,'WordWorth2Text 1.02' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
-
- MODULE 'tools/ctype', '*epo'
-
- DEF vers, mem2, len2
-
-
- PROC em_isdatatype(memadr, lenadr)
- DEF vers = 0
- DEF w:PTR TO LONG
-
-
- -> Check for FORM header
-
- vers := 1
- w := Long(memadr)
- IF w = "FORM"
- w := Long(memadr + 8)
- IF w <> "WOWO" THEN vers := 0
- ELSE
- vers := 0
- ENDIF
- ENDPROC vers
-
-
- PROC em_parsedata(memadr, lenadr)
- DEF count = 0, count2 = 0
- DEF wrapping = 80, notdonewrapping = TRUE, currchar = 0
- DEF notdone = TRUE
- -> Allocate memory for file
- -> IF (mem2 := New(lenadr + 1)) = NIL THEN RETURN -1
- -> mem2[lenadr + 1] := "\n" -> Put safety LF at the end of mem
- DEF w:PTR TO LONG
- DEF iswtxt = FALSE
-
- mem2 := memadr
-
- WHILE notdone AND (count < lenadr)
- IF (currchar >= wrapping)
- WHILE notdonewrapping
- SELECT 256 OF memadr[count]
- CASE $00
- DEC count
- DEFAULT
- IF isspace(memadr[count]) = FALSE
- DEC count
- DEC count2
- ELSE
- notdonewrapping := FALSE
- ENDIF
- ENDSELECT
- ENDWHILE
- INC count
-
- currchar := 0
- memadr[count2++] := "\n"
- notdonewrapping := TRUE
- ENDIF
-
- WHILE memadr[count] <> "W" DO INC count
-
- w := Long(memadr + count)
- -> WriteF('\s\n', w)
- SELECT w
- CASE "WPAR"
- INC count
-
-
- CASE "WTXT"
- count := count + 8
- iswtxt := TRUE
- WHILE iswtxt
-
- SELECT 256 OF memadr[count]
- CASE "W"
- w := Long(memadr + count)
- -> WW3 docs don#t have LF/CR!
- SELECT w
- CASE "WTXT"
- DEC count
- memadr[count2++] := "\n"
- iswtxt := FALSE
- currchar := 0
- CASE "WPAR"
- count := count + 8
- iswtxt := FALSE
- CASE "WFSC"
- count := count + 8
- iswtxt := FALSE
- CASE "WHED"
- iswtxt := FALSE
- notdone := FALSE
- DEFAULT
- SELECT 256 OF memadr[count]
- CASE $00
- INC count
- CASE $0f
-
- IF memadr[count + 1] <> $00
- w := Long(memadr + count + 1)
- IF w <> "WTXT"
- memadr[count2++] := "\n"
- currchar := 0
- ENDIF
- ENDIF
- INC count
- DEFAULT
- memadr[count2++] := memadr[count++]
- INC currchar
- ENDSELECT
- ENDSELECT
- DEFAULT
- SELECT 256 OF memadr[count]
- CASE $00
- INC count
- CASE $0f
- IF memadr[count + 1] <> $00
- w := Long(memadr + count + 1)
- IF w <> "WTXT"
- memadr[count2++] := "\n"
- currchar := 0
- ENDIF
- ENDIF
- INC count
- DEFAULT
- memadr[count2++] := memadr[count++]
- INC currchar
- ENDSELECT
- ENDSELECT
- ENDWHILE
-
-
-
- INC count
- CASE "WHED"
- notdone := FALSE
- DEFAULT
- INC count
- ENDSELECT
-
- ENDWHILE
-
-
- mem2[count2] := "\n"
-
- -> IF memadr
- -> Dispose(memadr); memadr := NIL
- -> ENDIF
- ENDPROC mem2, count2
- -><
-
- -> *** STANDARD PROCS FOR PLUGINS
-
-
- PROC em_main(epo:PTR TO em_pluginobj)
- mem2, len2 := em_parsedata(epo.buffer, epo.length)
- epo.buffer := mem2
- epo.length := len2
- RETURN TRUE
- ENDPROC
-
- PROC em_begin(epo:PTR TO em_pluginobj)
- vers := em_isdatatype(epo.buffer, epo.length)
- IF vers
- RETURN TRUE
- ELSE
- RETURN FALSE
- ENDIF
- ENDPROC
-
- PROC em_end() IS EMPTY
-
- PROC em_info() IS 'WordWorth2Text 1.02'
-
- PROC em_pluginid() IS "FILE"
-
- PROC em_format() IS 'WordWorth'
-
- PROC main() IS EMPTY
-